package com.example.design.函数式编程.c柯里化;


import java.util.ArrayList;
import java.util.List;

public class Currying01 {
    public static void main(String[] args) {
        step3(step2(step1()));
    }

    @FunctionalInterface
    interface Fa {
        Fb op(List<Integer> a);
    }

    @FunctionalInterface
    interface Fb {
        Fc op(List<Integer> b);
    }

    @FunctionalInterface
    interface Fc {
        List<Integer> op(List<Integer> c);
    }


    /**
     * 将三份数据合并，但数据不能一次得到
     * <p>
     * a ->函数对象
     *      b -> 函数对象
     *          c->完成合并
     */
    static Fb step1() {
        List<Integer> x = new ArrayList<>();
        x.add(1);
        x.add(2);
        x.add(3);

        Fa fa = a-> b->c-> {
            List<Integer> result = new ArrayList<>();
            result.addAll(a);
            result.addAll(b);
            result.addAll(c);
            return result;
        };
        return fa.op(x);
    }

    static Fc step2(Fb fb) {
        List<Integer> b = new ArrayList<>();
        b.add(4);
        b.add(5);

        return fb.op(b);
    }

    static void step3(Fc fc) {
        List<Integer> c = new ArrayList<>();
        c.add(6);
        List<Integer> op = fc.op(c);
        System.out.println(op);
    }
}
